
#ifndef EPlateauh
#define EPlateauh

//#include "Case.h"
#include "MatriceDesPossibles.h"
#include "all2.h"

using namespace std;

		struct indice{

		 int ligne, colonne, numeroPiece, rotation; // toutes les infos d'un indice

		};


class EPlateau{

	public:

	//constructeurs
	EPlateau(const char * nomFichier);
    EPlateau(EPlateau * e);
    void parserPuzzle(const char * nomFichier);
    void initPiecesPossibles(); //initialise la liste de pieces possibles quand le plateau est vide.

    ~EPlateau();

	//Accesseurs
    //vector <vector <Case> > getPlateau();
	vector <Piece> getListePieces();
	int getScore();
	void setScore(int i);
	int getTaille();
	int getNbPiecesPosees();
	Po getPo(int x, int y);
    vector <Po> getLpo();


    //affichage
	void affichePlateau();
    void affichePossibles(int x,int y);

	//fonctions
	bool jouer(Coup coup);
	bool jouer(char ori, Piece pi, char abs, char ord);

    bool coupJouable(Coup coup);
    bool coupJouable(Po p, Coord c);

    vector<Po> listeCoupsJouable(Coord c);

	bool dansPlateau(Coord c);
	bool dansPlateau(int x, int y);

    void majPossibles(Coup coup);
    void majOD(Coup coup);
    vector< Po > vecteurCase(Coord c); //retourne le vecteur des pieces possibles sur la coord donnée.
    Coord caseLaPlusContrainte();
    int poToInt(Po pieceOriente);

	int getNbPiecesPossibles(Coord c);

    const char * getFichier();
    int getMeilleurScore();

	private:



    vector<vector<Po> > plateau;
    vector<vector<vector <Po> > > piecesPossible; //liste des pieces orientées posabe sur la case x,y
    vector<vector<int> > nbPiecesPossible; //nombre de pieces orientées posables sur la case x,y
    vector <Piece>  listePieces;
    int taille;
    int nbColor;
    vector <int> nbDemande;
    vector <int> nbOffre;
    int nbPiecesPosees;
    MatriceDesPossibles * coupsPossibles;
    int meilleurscore;
    short valideOd; //0 = ok. 1 = limite. 2 = coup forcé. 3 = erreur. Pour l'instant seul 0 et 3 sont utilisés.
    const char * fichier;
    indice * tableIndices; //tableau d'indices
	int nbIndices;


};


#endif
